﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class OdemeBasarisiz : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            String[] odemeparametreleri = new String[] { "AuthCode", "Response", "HostRefNum", "ProcReturnCode", "TransId", "ErrMsg", "ClientIp", "ReturnOid", "MaskedPan", "PaymentMethod", "rnd" };


            for (int i = 0; i < odemeparametreleri.Length; i++)
            {
                String paramname = odemeparametreleri[i];
                parameters.Add(paramname, Request.Form.Get(paramname));
                //String paramval = Request.Form.Get(paramname);
                //Response.Write("<tr><td>"+paramname+"</td><td>"+paramval+"</td></tr>");
            }

            int SiparisReferansId = Sessions.SiparisFiyati["SiparisReferansId"].ToIntNN();
            DataAccess.Upd3DYanit(SiparisReferansId, parameters["AuthCode"], parameters["Response"], parameters["HostRefNum"],
                                    parameters["ProcReturnCode"], parameters["TransId"], parameters["ErrMsg"], parameters["ClientIp"],
                                    parameters["ReturnOid"], parameters["MaskedPan"], parameters["PaymentMethod"], parameters["rnd"]);

            String hashparams = Request.Form.Get("HASHPARAMS");
            String hashparamsval = Request.Form.Get("HASHPARAMSVAL");
            String storekey = "123456";
            String paramsval = "";
            int index1 = 0, index2 = 0;
            // hash hesaplamada kullanılacak değerler ayrıştırılıp değerleri birleştiriliyor.

            do
            {
                index2 = hashparams.IndexOf(':', index1);

                String val = Request.Form.Get(hashparams.Substring(index1, index2 - index1)) == null ? "" : Request.Form.Get(hashparams.Substring(index1, index2 - index1));
                paramsval += val;

                index1 = index2 + 1;

            }
            while (index1 < hashparams.Length);

            String hashval = paramsval + storekey;         //elde edilecek hash değeri için paramsval e store key ekleniyor. (işyeri anahtarı)
            String hashparam = Request.Form.Get("HASH");

            System.Security.Cryptography.SHA1 sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
            byte[] hashbytes = System.Text.Encoding.GetEncoding("ISO-8859-9").GetBytes(hashval);
            byte[] inputbytes = sha.ComputeHash(hashbytes);

            String hash = Convert.ToBase64String(inputbytes); //Güvenlik ve kontrol amaçlı oluşturulan hash     

            String mdStatus = Request.Form.Get("mdStatus"); // 3d işlemin sonucu

            Control updPanel = (this.Master as Skala).FindControl("upAd");
            if (!paramsval.Equals(hashparamsval) || !hash.Equals(hashparam)) //oluşturulan hash ile gelen hash ve hash parametreleri değerleri ile ayrıştırılıp edilen edilen aynı olmalı.
            {
                ScriptManager.RegisterStartupScript(updPanel, updPanel.GetType(), "a", "<script> alertSiparis('Güvenlik Uyarısı. Sayısal İmza Geçerli Değil'); </script>", false);
                //Response.Write("<h4>Güvenlik Uyarısı. Sayısal İmza Geçerli Değil</h4>");
            }

            if (mdStatus.Equals("1") || mdStatus.Equals("2") || mdStatus.Equals("3") || mdStatus.Equals("4"))//3D işlemi başarılı
            {
                if ("Approved".Equals(Request.Form.Get("Response")))//Ödeme başarılı
                {
                    DataRow drSiparis = Sessions.SiparisFiyati;

                    int FaturaAdresi = Sessions.FaturaAdresi;
                    int TeslimatAdresi = Sessions.TeslimatAdresi;

                    decimal Fiyat = (decimal)drSiparis["ToplamFiyat"];
                    decimal ParaPuan = (decimal)drSiparis["ParaPuan"];
                    bool ParaPuanKullanildiMi = (bool)drSiparis["ParaPuanKullanildiMi"];
                    bool IndirimKullanildiMi = (bool)drSiparis["IndirimKullanildiMi"];
                    int IndirimId = Convert.ToInt16(drSiparis["IndirimId"]);
                    int ParaBirimiId = Convert.ToInt16(drSiparis["ParaBirimiId"]);
                    int OdemeSekli = Convert.ToInt16(drSiparis["OdemeSekliId"]);
                    string ParaBirimi = drSiparis["ParaBirimi"].ToString();
                    int UrunId = Convert.ToInt16(Sessions.SiparisFiyati["UrunId"]);
                    int HizliAdet = Convert.ToInt16(Sessions.SiparisFiyati["HizliAdet"]);
                    decimal OdenecekTutar = (decimal)Sessions.SiparisFiyati["OdenecekTutar"];

                    DataRow Siparis = DataAccess.InsSiparis(OdemeSekli, FaturaAdresi, TeslimatAdresi, Fiyat, OdenecekTutar, ParaPuan, ParaPuanKullanildiMi, IndirimKullanildiMi, IndirimId, ParaBirimiId, ParaBirimi, UrunId, HizliAdet, SiparisReferansId);
                    if (Siparis != null)
                    {
                        int SepetAdedi = Convert.ToInt16(Siparis["SepetAdedi"]);
                        Sessions.SepetAdedi = Convert.ToInt16(SepetAdedi);
                        (this.Master as Skala).SepetAdediGuncelle(SepetAdedi);
                        string SiparisNo = Siparis["SiparisId"].ToString();
                        Sessions.SiparisFiyati = null;

                        ScriptManager.RegisterStartupScript(updPanel, updPanel.GetType(), "b", "<script> alertSiparis('" + SiparisNo + " numaralı siparişiniz alınmıştır. Siparişinizi hesabım sayfasından takip edebilirsiniz.'); </script>", false);
                    }
                }
                else//Ödeme başarısız
                {
                    string hata = parameters["ErrMsg"];
                    ScriptManager.RegisterStartupScript(updPanel, updPanel.GetType(), "c", "<script> alertSiparis('Ödeme başarısız : " + hata + "'); </script>", false);
                }
            }
            else // 3D işlemi başarısız
            {
                ScriptManager.RegisterStartupScript(updPanel, updPanel.GetType(), "d", "<script> alertSiparis('3D işlemi başarısız'); </script>", false);
            }

        }
    }
}